import router from '@/router'
import store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'
// 白名单页面
const whitePage = ['/login', '/404']
// nprogress:进度条组件
/*
1：安装  yarn add nprogress
2:导入  import Nprogress from 'nprogress'
        import "nprogress/nprogress.css"
3:
   开始：Nprogress.start()
   结束：Nprogress.done()
4:去掉转圈圈效果
  #nprogress .spinner {
  display: none !important;
}

*/
/*
获取用户信息：
1：定义api
2:导入（在vuex的user模块导入）
3：定义state,mutation,actions调用，存储用户信息
4：触发actions：在导航守卫中进入需要登陆的页面前触发
*/

router.beforeEach(async(to, from, next) => {
  // 需求：需要登陆访问的页面，登录后才可进入，不需要登录的页面，直接进入，登录了的用户不能进入登录页，直接跳首页
  /*
  是否有token
      有
         判断是否是登录页
              是：跳转到首页
              不是：直接进入
      没有
         判断页面是否需要登录:白名单页面
              需求：跳转到登录页
              不需要：直接放行
*/
  //   console.log('to', to)
  /*
从哪个页面回到登录页，登陆成功也要回到相应页面
解决方案：路由传值，告诉登陆页要回跳的地址
去登陆页的地方：
导航守卫，
 传：传入要去的页面的fullPath
 收:this.$route.query.参数

logout
  传：当前所处的页面的fullPath  location.href.split('#')[1]
   收:this.$route.query.参数
*/

  Nprogress.start()
  if (store.state.user.token) {
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      if (!store.state.user.userInfo.userId) {
        await store.dispatch('user/getUserInfo') // 添加了employees
        // 再经历一次导航守卫
        // next():直接放行，不会再经过导航守卫  next(其它path地址)：再经过一次导航守卫
        // 做一个判断：要去的页面的路由如果在vuex的routes中存在，跳转到next(to.fullPath)  不存在 next('/')
        next(to.fullPath)
      } else {
        next()
      }
    }
  } else {
    if (!whitePage.includes(to.path.toLowerCase())) {
      next('/login?back=' + to.fullPath)
    } else {
      next()
    }
  }
  Nprogress.done()
})
// 后置守卫
router.afterEach(() => {
  Nprogress.done()
})
